package com.lecyon.farm.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.lecyon.farm.entity.FmWork;
import com.lecyon.farm.vo.data.FmWorkStatisticByAreaVo;
import com.lecyon.farm.vo.query.QueryFmWorkVo;
import com.lecyon.farm.vo.view.FmStatisticDataVo;
import com.lecyon.farm.vo.view.FmWorkVo;
import com.lecyon.farm.vo.view.StatisticByAreaAndWorkTypePerYear;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * 农机作业历史 Mapper
 *
 * @author YaoZheng
 * @since 2020-04-02
 */
@Component
public interface FmWorkMapper extends BaseMapper<FmWork> {

    /**
     * 根据id查看农机作业记录
     *
     * @param condition 查询条件（id）
     * @return 查询结果
     */
    FmWorkVo selectByPrimaryKey(@Param("customQuery") QueryFmWorkVo condition);

    /**
     * 查询农机作业记录列表
     *
     * @param page      分页信息
     * @param condition 查询条件
     * @return 查询结果
     */
    Page<FmWorkVo> selectByPage(IPage<FmWorkVo> page, @Param("customQuery") QueryFmWorkVo condition);

    /**
     * 查询农机作业记录列表
     *
     * @param condition 查询条件
     * @return 查询结果
     */
    List<FmWorkVo> selectByCondition(@Param("customQuery") QueryFmWorkVo condition);

    /**
     * 查询农机作业统计数据列表
     *
     * @param page      分页信息
     * @param condition 查询条件
     * @return 查询结果
     */
    Page<FmStatisticDataVo> selectStatisticByPage(IPage<FmStatisticDataVo> page, @Param("customQuery") QueryFmWorkVo condition);

    /**
     * 查询所有农机作业统计数据列表
     *
     * @param condition 查询条件
     * @return 查询结果
     */
    List<FmStatisticDataVo> selectStatistic(@Param("customQuery") QueryFmWorkVo condition);

    /**
     * 查询按区域统计作业量（省）
     *
     * @param condition 查询条件
     * @return 查询结果
     */
    List<FmWorkStatisticByAreaVo> selectStatisticGroupByProvince(@Param("customQuery") QueryFmWorkVo condition);

    /**
     * 查询按区域统计作业量（城市）
     *
     * @param condition 查询条件
     * @return 查询结果
     */
    List<FmWorkStatisticByAreaVo> selectStatisticGroupByCity(@Param("customQuery") QueryFmWorkVo condition);

    /**
     * 查询按区域统计作业量(区县）
     *
     * @param condition 查询条件
     * @return 查询结果
     */
    List<FmWorkStatisticByAreaVo> selectStatisticGroupByCounty(@Param("customQuery") QueryFmWorkVo condition);

    /**
     * 查询按区域统计作业量
     *
     * @param condition 查询条件
     * @return 查询结果
     */
    List<FmWorkStatisticByAreaVo> selectStatisticGroupByTowns(@Param("customQuery") QueryFmWorkVo condition);

    /**
     * 按区域及作业类型统计
     * 当年作业总面积、当年作业总合格面积、参与作业设备数量
     *
     * @param condition 查询条件
     * @return 查询结果
     */
    List<StatisticByAreaAndWorkTypePerYear> statisticByAreaAndWorkTypePerYear(@Param("customQuery") QueryFmWorkVo condition);

}
